package cc.rengu.igas.channel.wechat.facade;


import cc.rengu.igas.channel.wechat.facade.request.*;
import cc.rengu.igas.channel.wechat.facade.response.*;
import cc.rengu.igas.channel.wechat.facade.result.Result;

/**
 * 微信消息推送接口
 */
public interface WechatMsgPushService {

    /**
     * 商户认证交易消息推送
     *
     * @param mchntAuthMsgPushRequest
     * @return 商户认证交易消息推送结果
     * @throws Exception
     */
    Result<MchntAuthMsgPushResponse> mchntAuthMsgPush(MchntAuthMsgPushRequest mchntAuthMsgPushRequest) throws Exception;

    /**
     * 拓展经理认证消息推送
     *
     * @param expandManagerMsgPushRequest
     * @return 拓展经理认证消息推送结果
     * @throws Exception
     */
    Result<ExpandManagerMsgPushResponse> expandManagerMsgPush(ExpandManagerMsgPushRequest expandManagerMsgPushRequest) throws Exception;


    /**
     * 动账交易提醒消息推送
     *
     * @param financialTransMsgPushRequest
     * @return 动账交易提醒消息推送结果
     * @throws Exception
     */
    Result<FinancialTransMsgPushResponse> financialTransMsgPush(FinancialTransMsgPushRequest financialTransMsgPushRequest) throws Exception;

    /**
     * 商户申请受理消息推送(商户)
     *
     * @param mchntApplyAcceptMsgPushRequest
     * @return 商户申请受理消息推送(商户)结果
     * @throws Exception
     */
    Result<MchntApplyAcceptMsgPushResponse> mchntApplyAcceptMsgPush(MchntApplyAcceptMsgPushRequest mchntApplyAcceptMsgPushRequest) throws Exception;

    /**
     * 商户申请提醒消息推送(拓展经理)
     *
     * @param mchntApplyRemindMsgPushRequest
     * @return 商户申请提醒消息推送(拓展经理)结果
     * @throws Exception
     */
    Result<MchntApplyRemindMsgPushResponse> mchntApplyRemindMsgPush(MchntApplyRemindMsgPushRequest mchntApplyRemindMsgPushRequest) throws Exception;

    /**
     * 退款成功提醒消息推送
     *
     * @param refundMsgPushRequest
     * @return 退款成功提醒消息推送结果
     * @throws Exception
     */
    Result<RefundMsgPushResponse> refundMsgPush(RefundMsgPushRequest refundMsgPushRequest) throws Exception;

    /**
     * 撤销交易成功消息推送
     *
     * @param cancelMsgPushRequest
     * @return 撤销交易成功消息推送结果
     * @throws Exception
     */
    Result<CancelMsgPushResponse> cancelMsgPush(CancelMsgPushRequest cancelMsgPushRequest) throws Exception;

    /**
     * 商户审核通过通知消息推送(拓展经理)
     *
     * @param mchntCheckPassMsgPushRequest
     * @return 商户审核通过通知消息推送(拓展经理)结果
     * @throws Exception
     */
    Result<MchntCheckPassMsgPushResponse> mchntCheckPassMsgPush(MchntCheckPassMsgPushRequest mchntCheckPassMsgPushRequest) throws Exception;

    /**
     * 商户审核通过待认证消息推送(拓展经理)
     *
     * @param mchntCheckReviewMsgPushRequest
     * @return 商户审核通过待认证消息推送(拓展经理)结果
     * @throws Exception
     */
    Result<MchntCheckReviewMsgPushResponse> mchntCheckReviewMsgPush(MchntCheckReviewMsgPushRequest mchntCheckReviewMsgPushRequest) throws Exception;

    /**
     * 派单通知消息推送
     *
     * @param dispatchMsgPushRequest
     * @return 派单通知消息推送结果
     * @throws Exception
     */
    Result<DispatchMsgPushResponse> dispatchMsgPush(DispatchMsgPushRequest dispatchMsgPushRequest) throws Exception;

    /**
     * 审核未通过通知
     *
     * @param checkFailMsgPushRequest
     * @return 审核未通过通知结果
     * @throws Exception
     */
    Result<CheckFailMsgPushResponse> checkFailMsgPush(CheckFailMsgPushRequest checkFailMsgPushRequest) throws Exception;

    /**
     * 商户待审核通知(审核员)
     *
     * @param mchntCheckPushRequest
     * @return 商户待审核通知(审核员)结果
     * @throws Exception
     */
    Result<MchntCheckPushResponse> mchntCheckPush(MchntCheckPushRequest mchntCheckPushRequest) throws Exception;

    /**
     * 商户资料修改消息推送(拓展经理)
     *
     * @param mchntInfoUpdateMsgPushRequest
     * @return 商户资料修改消息推送(拓展经理)结果
     * @throws Exception
     */
    Result<MchntInfoUpdateMsgPushResponse> mchntInfoUpdateMsgPush(MchntInfoUpdateMsgPushRequest mchntInfoUpdateMsgPushRequest) throws Exception;

    /**
     * 二维码停用通知(拓展经理)
     *
     * @param qrcodeStopMsg2managerPushRequest
     * @return 二维码停用通知(拓展经理)结果
     * @throws Exception
     */
    Result<QrcodeStopMsg2managerPushResponse> qrcodeStopMsg2managerPush(QrcodeStopMsg2managerPushRequest qrcodeStopMsg2managerPushRequest) throws Exception;

    /**
     * 二维码停用通知(商户)
     *
     * @param qrcodeStopMsg2MchntPushRequest
     * @return 二维码停用通知(商户)结果
     * @throws Exception
     */
    Result<QrcodeStopMsg2MchntPushResponse> qrcodeStopMsg2MchntPush(QrcodeStopMsg2MchntPushRequest qrcodeStopMsg2MchntPushRequest) throws Exception;

    /**
     * 证件到期提醒消息推送
     *
     * @param certExprMsgPushRequest
     * @return 证件到期提醒消息推送结果
     * @throws Exception
     */
    Result<CertExprMsgPushResponse> certExprMsgPush(CertExprMsgPushRequest certExprMsgPushRequest) throws Exception;

    /**
     * 统一消息推送
     *
     * @param unifiedMsgPushRequest
     * @return 消息推送结果
     * @throws Exception
     */
    Result<UnifiedMsgPushResponse> unifiedMsgPush(UnifiedMsgPushRequest unifiedMsgPushRequest) throws Exception;

    /**
     * 商户巡检核查通知
     *
     * @param inspectCheckMsgPushRequest
     * @return 消息推送结果
     * @throws Exception
     */
    Result<InspectCheckMsgPushResponse> inspectCheckMsgPush(InspectCheckMsgPushRequest inspectCheckMsgPushRequest) throws Exception;

}
